%% Приложение

\chapter{Примеры работы SASL}
\label{app2}

\begin{enumerate}
\item Вся необходимая терминология и описания атрибутов приведены в Главе №1, «TLS -- потоки и TLS -- строфы в контексте XMPP».

\item (alt) --- альтернативные шаги, не обязательные к выполнению, но возможные (случай сбоя или ошибки).
\end{enumerate}

\section{<<Клиент-Сервер>>}
\label{app2:sec1}

Схема обмена данными при аутентификации клиента сервером с привлечением SASL (это делается в норме после согласования применения TLS)

Шаг 1: Клиент формирует поток серверу:

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 2: Сервер реагирует посылкой клиенту тэга потока:

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       id='c2s_234'
       from='example.com'
       version='1.0'>
\end{verbatim}

Шаг 3: Сервер информирует клиента об имеющихся механизмах аутентификации:

\begin{verbatim}
<stream:features>
     <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
       <required/>
     </starttls>
     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
       <mechanism>DIGEST-MD5</mechanism>
       <mechanism>PLAIN</mechanism>
     </mechanisms>
   </stream:features>
\end{verbatim}

Шаг 4: Клиент выбирает механизм аутентификации:

\begin{verbatim}
<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
         mechanism='DIGEST-MD5'/>
\end{verbatim}

Шаг 5: Сервер посылает закодированный вызов клиенту:

\begin{verbatim}
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
   cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9
   ImF1dGgi
   LGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==
   </challenge>
\end{verbatim}

Декодированный вызов имеет вид:

\begin{verbatim}
Декодированный вызов имеет вид:
realm="somerealm",nonce="OA6MG9tEQGm2hh",\
   qop="auth",charset=utf-8,algorithm=md5-sess
\end{verbatim}

Шаг 5 (alt): Сервер возвращает клиенту сообщение об ошибке:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
     <incorrect-encoding/>
   </failure>
   </stream:stream>
\end{verbatim}

Шаг 6: Клиент посылает закодированный отклик на вызов:

\begin{verbatim}
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
   dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i
   T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw
   MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i
   LHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNo
   YXJzZXQ9dXRmLTgK
   </response>
\end{verbatim}

Декодированный отклик имеет вид:

\begin{verbatim}
username="somenode",realm="somerealm",\
   nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",\
   nc=00000001,qop=auth,digest-uri="xmpp/example.com",\
   response=d388dad90d4bbd760a152321f2143af7,charset=utf-8
\end{verbatim}

Шаг 7: Сервер посылает еще один закодированный вызов клиенту:

\begin{verbatim}
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
   cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
   </challenge>
\end{verbatim}

Декодированный вызов имеет вид:

\begin{verbatim}
rspauth=ea40f60335c427b5527b84dbabcdfffd
\end{verbatim}

Шаг 7 (alt): Сервер посылалает клиенту сообщение об ошибке:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
     <temporary-auth-failure/>
   </failure>
   </stream:stream>
\end{verbatim}

Шаг 8: Клиент откликается на вызов:

\begin{verbatim}
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
\end{verbatim}

Шаг 9: Сервер информирует клиента об успешной аутентификации:

\begin{verbatim}
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
\end{verbatim}

Шаг 9 (alt): Сервер информирует клиента об ошибке аутентификации:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
     <temporary-auth-failure/>
   </failure>
   </stream:stream>
\end{verbatim}

Шаг 10: Клиент формирует новый поток к серверу:

\begin{verbatim}

<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 11: Сервер откликается посылкой заголовка потока клиенту, сообщая о любых дополнительных имеющихся возможностях (если таких возможностей нет, посылается пустой элемент):

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       id='c2s_345'
       from='example.com'
       version='1.0'>
   <stream:features>
     <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
     <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
   </stream:features>
\end{verbatim}


%Текст.

\section{<<Сервер-Сервер>>}
\label{app2:sec2}

Демонстрация информационного обмена при аутентификации одного сервера другим при использовании SASL, это в норме может производиться только после завершения согласования применения TLS.

Шаг 1: Сервер1 инициирует поток к Серверу2:

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 2: Сервер2 откликается посылкой Серверу1 тэга потока:

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       from='example.com'
       id='s2s_234'
       version='1.0'>
\end{verbatim}

Шаг 3: Сервер2 информирует Сервер1 о доступных механизмах аутентификации:

\begin{verbatim}
<stream:features>
     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
       <mechanism>DIGEST-MD5</mechanism>
       <mechanism>KERBEROS_V4</mechanism>
     </mechanisms>
   </stream:features>
\end{verbatim}

Шаг 4: Сервер1 выбирает механизм аутентификации:

\begin{verbatim}
<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
         mechanism='DIGEST-MD5'/>
\end{verbatim}

Шаг 5: Сервер2 посылает закодированный вызов Серверу1:

\begin{verbatim}
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
   cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9
   ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz
   </challenge>
\end{verbatim}

Декодированный вызов имеет вид:

\begin{verbatim}
realm="somerealm",nonce="OA6MG9tEQGm2hh",\
   qop="auth",charset=utf-8,algorithm=md5-sess
\end{verbatim}

Шаг 5 (alt): Сервер2 возвращает Серверу1 сообщение об ошибке:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
     <incorrect-encoding/>
   </failure>
   </stream:stream>
\end{verbatim}

Шаг 6: Сервер1 посылает закодированный отклик на вызов:

\begin{verbatim}
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
   dXNlcm5hbWU9ImV4YW1wbGUub3JnIixyZWFsbT0ic29tZXJlYWxtIixub25j
   ZT0iT0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5j
   PTAwMDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5v
   cmciLHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3
   LGNoYXJzZXQ9dXRmLTgK
   </response>
\end{verbatim}

Дешифрованный отклик имеет вид:

\begin{verbatim}
username="example.org",realm="somerealm",\
   nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",\
   nc=00000001,qop=auth,digest-uri="xmpp/example.org",\
   response=d388dad90d4bbd760a152321f2143af7,charset=utf-8
\end{verbatim}

Шаг 7: Сервер2 посылает еще один закодированный вызов Серверу1: 

\begin{verbatim}
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
   cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
   </challenge>
\end{verbatim}

Декодированный вызов имеет вид:

\begin{verbatim}
rspauth=ea40f60335c427b5527b84dbabcdfffd
\end{verbatim}

Шаг 7 (alt): Сервер2 возвращает Серверу1 сообщение об ошибке: 

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
     <invalid-authzid/>
   </failure>
   </stream:stream>
\end{verbatim}

Шаг 8: Сервер1 откликается на вызов:

\begin{verbatim}
>response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
\end{verbatim}

Шаг 8 (alt): Сервер1 абортирует согласование:

\begin{verbatim}
<abort xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
\end{verbatim}

Шаг 9: Сервер2 информирует Сервер1 об успешной аутентификации:

\begin{verbatim}
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
\end{verbatim}

Шаг 9 (alt): Сервер2 информирует Сервер1 о неудаче аутентификации:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
     <aborted/>
   </failure>
   </stream:stream>
\end{verbatim}

Шаг 10: Сервер1 инициирует новый поток к Серверу2:

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 11: Сервер2 откликается посылкой Серверу1 заголовка потока, а также данными о любых дополнительных возможностях (при отсутствии последних посылается пустой элемент):

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       from='example.com'
       id='s2s_345'
       version='1.0'>
   <stream:features/>
\end{verbatim} \cite{lit1}
 \begin{thebibliography}{99}
 \bibitem{lit1} \textit{Acronym Geek} Расшифровка аббревиатур. --- http://www.acronymgeek.com/.
 \bibitem{lit2} \textit{Book.itep} Расширяемый протокол обмена сообщениями и данными о присутствии (XMPP): Ядро. --- http://book.itep.ru/4/45/xmpp.htm.
 \bibitem{lit3} \textit{Book.itep} Обмен сообщениями в реальном масштабе времени. --- http://book.itep.ru/4/45/im.htm. 
 \bibitem{lit4} \textit{IETF} Extensible Messaging and Presence Protocol (xmpp). --- http://www.ietf.org/dyn/wg/charter/xmpp-charter.html.
 \bibitem{lit5} \textit{ITC.UA} Jabber -- основа открытых IM -- систем. --- http://www.itc.ua/node/20538. 
 \bibitem{lit6} \textit{NBSP//Журнал для web -- мастеров} IETF публикует RFC для XMPP. --- http://www.nbsp.ru/news/2004/10/05.
 \bibitem{lit7} \textit{Web 2.0 Portal} История возникновения и развития Jabber. --- http://web20.su/2009/07/jabber-story.html.  
 \bibitem{lit8} \textit{XMPP} XEP-0227: Portable Import/Export Format for XMPP-IM Servers. --- http://xmpp.org/extensions/xep-0227.html. 
 \bibitem{lit9} \textit{XMPP} XMPP Protocol Stack. --- http://xmpp.org/protocols/.
 \bibitem{lit10} \textit{XMPP} XMPP Roundup 10. ---  

http://blog.xmpp.org/index.php/2009/06/xmpp-roundup-10/.
 \bibitem{lit11} \textit{XMPP} XMPP Roundup 12. --- 

http://blog.xmpp.org/index.php/2009/09/xmpp-roundup-12/.
 \bibitem{lit12} \textit{XMPP} XMPP Technologies: Overview. --- http://xmpp.org/tech/overview.shtml.
 \bibitem{lit13} \textit{Мотиенко О.В.} Использование протокола XMPP для организации корпоративной системы обмена сообщениями. --- По материалам восьмой международной научно-практической конференции <<Информационная безопасность 2006>> --- http://www.jabber.ru/node/125.


 \end{thebibliography}


%%% Local Variables:
%%% mode: latex
%%% coding: utf-8-unix
%%% TeX-master: "../default"
%%% End:
